1. Field of the Invention
The present invention relates generally to software testing, and more particularly, to methods and systems for testing computer software intelligently.
2. Description of the Related Art
As the use of computer software in performing daily tasks is increasing rapidly, assessing software reliability through software testing has become an imperative stage in the software development cycle. As is well known, software testing is directed toward eliminating defects (i.e., bugs) in computer software, which if undetected, can create significant negative results.
As is well known, multiple groups of developers are involved during the computer software development, each group responsible for developing a certain portion of the source code (i.e., a workspace). Each group ensures that its workspace performs properly before integrating it into the master workspace. That is, each group is responsible for ensuring the proper performance of its workspace every time a modification is made to the source code. Typically, testing the integrity and proper performance of the modified workspace is performed using a pre-integration testing using multiple test cases of a given test suite. Once it has been established that the modified workspace functions properly, the modified workspace is then included in the baseline (i.e., the master workspace) which integrity is then tested using the nightly testing.
Typically, to achieve a bug-free workspace, the group is responsible for manually setting up and executing the test system. That is, the group is responsible for manually selecting the essential test cases to be executed and manually distributing the test cases to different computer systems.
As is well known, the number of test cases in each test suite is typically static (i.e., fixed) and in the order of thousands for any given source code. Thus, for ease of reference, all the test cases of a give test suite are equally divided and defined in multiple components. For instance, a test suite may include ten (10) components, with each component including an equal number of test cases (e.g., about 5,000 test cases).
Desirably, testing the modified should involve the execution of test cases affected by such modifications. However, selecting only the affected test cases requires that the members of the group be able to determine which test cases are affected, which in turn, requires the members of the group to have intimate knowledge of each test case in each component of each test suite. Since most members of the group do not have the necessary information, thus far, the testing process involves the execution of all test cases in selected components or all the components. As a result, typical testing process involves executing more than the necessary number of test cases. For instance, when a given component includes five thousand (5000) test cases, all 5000 tests cases in the component are executed when only thirty (30) test cases should be executed. Thus, the testing process suffers from executing a static number of test cases in the components irrespective of the fact that the necessary number of test cases may be significantly less.
Furthermore, using all the test cases in each and every component further suffers from redundancy resulting in a waste of time and resources. This occurs since multiple test cases may test the same functions or methods of the source code. Additionally, performing certain number of test cases unnecessarily causes the testing cycle to stretch for an extended period of time.
In certain scenarios, the modification to one workspace can further affect workspaces of different groups. However, since most groups are not familiar with the workspaces of the others, selecting a proper test case or component out of multiple test cases and components is an impossible task. As a result, a number of groups execute an unnecessary number of test cases. Thus, computer resources are unnecessarily wasted while significantly increasing the number of hours merely dedicated to analysis of the results produced by the testing process. Although one way to avoid this problem is having extended interactions between different groups, such interactions are disfavored, as they involve numerous time-consuming communication cycles.
In view of the foregoing, there is a need for a flexible methodology and system to intelligently test computer software.